package com.my.thread;

import com.my.core.util.spring.SpringUtilStatic;
import com.my.launcher.LauncherApplication;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.core.io.ClassPathResource;

import java.io.IOException;

/**
 * @auther zzyy
 * @create 2020-02-21 18:07
 */
//SPI SpringFactoriesLoader
//https://blog.csdn.net/weixin_34184561/article/details/94497734
//
//https://www.cnblogs.com/softidea/p/5759180.html
@SpringBootApplication
//可以在配置文件中配置排除
//@SpringBootApplication(exclude = DruidDataSourceAutoConfigure.class)

//https://blog.csdn.net/m0_37739193/article/details/85097477
//在SpringBootApplication上使用@ServletComponentScan注解后，Servlet、Filter、Listener可以直接通过@WebServlet、@WebFilter、@WebListener注解自动注册，无需其他代码。
//Springboot注解@ServletComponentScan和@ComponentScan
//@ComponentScan(value = {"com.lemon.springboot"})
//@ServletComponentScan

//@SpringCloudApplication
public class TimoMain {
    /**
     * Spring-Boot启动的时候，加载、创建、初始化数据
     * @return 初始化信息
     */
    @Bean
    CommandLineRunner demo() {
        return args -> {
            System.out.println("<<<<<<<<<    Hello,Spring Boot !    >>>>>>>>");
        };
    }

    public static void main(String[] args) throws InterruptedException, IOException {
//        ConfigurableApplicationContext run = SpringApplication.run(TimoMain.class, args);
//        SpringUtil.setApplicationContext(run);
//        SpringApplication.run(TimoMain.class, args);
        ConfigurableApplicationContext test = LauncherApplication.run("test","application.properties",TimoMain.class, args);
        SpringUtilStatic.setApplicationContext(test);

        ClassPathResource resource = new ClassPathResource("META-INF/resources/index.jsp");
        if (!resource.exists()) {
            throw new RuntimeException("JSP 文件未找到，请检查路径或打包配置！");
        }
//        db模块配置的属性
//        String h2url = test.getEnvironment().getProperty("spring.datasource.dynamic.datasource.h2db.url");
//        String h23url = test.getEnvironment().getProperty("spring.h2.console.path");
//        System.err.println("h2url :"+h2url);
//        System.err.println("h23url :"+h23url);
//        String aaa = test.getEnvironment().getProperty("ccc.aaa");
//        System.err.println("aaa :"+aaa);

//        nacos动态配置的属性
//        while(true) {
        //nacos自动配置  项目名-环境.yaml blade-dev.yaml
//            String userName = test.getEnvironment().getProperty("user.name");
//            String userAge = test.getEnvironment().getProperty("user.age");
//            String dataId = test.getEnvironment().getProperty("spring.cloud.nacos.config.ext-config[0].data-id");
//            String configUrl = test.getEnvironment().getProperty("spring.cloud.nacos.config.server-addr");
//            String discoveryUrl = test.getEnvironment().getProperty("spring.cloud.nacos.discovery.server-addr");
//            //获取当前部署的环境
//            String currentEnv = test.getEnvironment().getProperty("current.env");
//            System.err.println("in "+currentEnv+" enviroment; "+"user name :" + userName + "; age: " + userAge);
//            System.err.println("configUrl :"+configUrl+";discoveryUrl: "+ discoveryUrl+";data-id:"+dataId);
//            TimeUnit.SECONDS.sleep(2);
//        }
//        new SpringApplicationBuilder(TimoMain.class)
//                .properties("spring.config.location=classpath:/test-profiles.yml")
//                .run(args);
//        // 启动Spring容器，指定端口为8848
//        ConfigurableApplicationContext context2 = new SpringApplicationBuilder(TestProfiles.class)
//                 //spring.config.location 设置后，只读取这个文件配置内容，不再读取其他地址的配置文件
//                //在使用 spring.config.location 指定外部配置文件时，需要此份配置文件需全量满足当前工程运行时所需，因为它不会去与 resources 目录下的配置文件去做 merge 操作。
//                //    1. file:./config/
//                //    2. file:./config/*/
//                //    3. file:./
//                 //   4. classpath:/config/
//                 //   5. classpath:/
//                //spring.config.additional-location   配置后加载顺序，属性会merge. 同名属性以优先级高的为准
//                    //1. file:./custom-config/
//                    //2. classpath:custom-config/
//                    //3. file:./config/
//                    //4. file:./config/*/
//                    //5. file:./
//                    //6. classpath:/config/
//                    //7. classpath:/
//                .properties("spring.config.location=classpath:/test-profiles.yml")
//                .properties("spring.profiles.active=mysql")
//                .properties("server.port=8848")
//                //是否是web环境
//				  .web(WebApplicationType.NONE)
//                //指定环境
//                .profiles("oracle")
//                .run(args);
//        // 输出变量
//        System.out.println(context2.getEnvironment().getProperty("jdbc.driver"));
    }


}
